package com.wan.service.impl;

import com.alibaba.fastjson.JSON;
import com.wan.constants.TokenConstants;
import com.wan.entity.LoginUser;
import com.wan.util.JwtUtil;
import com.wan.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class TokenServiceImpl implements TokenService {
	@Autowired
	private JwtUtil jwtUtil;

	@Autowired
	private StringRedisTemplate redisTemplate;

	@Override
	public Map<String, Object> createToken(LoginUser loginUser) {
		// 生成 token
		String token = loginUser.getToken();

		// 将用户信息存放到 Redis 中，使用 Redis 前缀和 token 作为键
		saveUserToRedis(token, loginUser);

		// 构建 JWT 载荷
		Map<String, Object> claims = new HashMap<>();
		claims.put(TokenConstants.JWT_TOKEN, token);

		// 生成 JWT Token
		String jwtToken = jwtUtil.createToken(claims);

		// 构建并返回结果 Map
		return buildResultMap(jwtToken);
	}

	// 将用户信息存储到 Redis 中
	private void saveUserToRedis(String token, LoginUser loginUser) {
		String redisKey = TokenConstants.REDIS_PREFIX + token;
		String userJson = JSON.toJSONString(loginUser);
		redisTemplate.opsForValue().set(redisKey, userJson);
	}

	// 构建返回的 Map
	private Map<String, Object> buildResultMap(String jwtToken) {
		Map<String, Object> resultMap = new HashMap<>();
		resultMap.put(TokenConstants.JWT_ACCESS_TOKEN, jwtToken);
		return resultMap;
	}
}
